from flask import Flask, request

app = Flask(__name__)

"""
GET   获取服务器资源，问好后面携带的参数一般告知服务器客户端需要什么数据
POST  往服务器提交新建数据，服务器最终保存到数据库，请求体里面的参数包含需要保存的数据
"""


@app.route('/')
def hello_world():
    return 'hello world'


# 127.0.0.1:5000/get?user_name=curry&user_id=30
# 若未设置methods则默认请求方式为：(OPTIONS, HEAD, GET)
@app.route('/get')
def demo1():
    """提取/get？后面携带的键值对参数"""
    # 使用request.method获取请求方式，限定请求方式
    if request.method == 'GET':
        # 这里采用请求中的查询参数
        user_name = request.args.get("user_name", "")
        user_id = request.args.get("user_id", "")
        return "%s------%s" % (user_name, user_id)
    else:
        return "405 请求方式不正确"


# 使用methods属性指明请求方式
@app.route('/post', methods=['POST'])
def demo2():
    return 'post success'


# 127.0.0.1:5000/post
@app.route('/post1', methods=['POST'])
def demo3():
    """获取post请求体里面携带的参数"""
    # 限定请求方式
    if request.method == 'POST':
        # 这里采用请求中的表单数据
        user_name = request.form.get("user_name", "")
        user_id = request.form.get("user_id", "")
        return "%s------%s" % (user_name, user_id)
    else:
        return "405 请求方式不正确"


# 127.0.0.1:5000/upload
@app.route('/upload', methods=['POST'])
def demo4():
    """接受客户端上传的一张图片数据，并在服务器保存起来"""
    if request.method == 'POST':
        # 这里采用files文件
        file = request.files.get('key', '')
        # 将图片保存到当前文件并重命名
        file.save('./1.png')
        return "upload success"
    else:
        return "405 请求方式不正确"


"""
GET请求方式下的url_map：
Map([<Rule '/' (GET, HEAD, OPTIONS) -> hello_world>,
 <Rule '/static/<filename>' (GET, HEAD, OPTIONS) -> static>])

POST请求方式下的url_map：
Map([<Rule '/post' (OPTIONS, POST) -> demo1>,
 <Rule '/' (GET, HEAD, OPTIONS) -> hello_world>,
 <Rule '/static/<filename>' (GET, HEAD, OPTIONS) -> static>])
"""

if __name__ == '__main__':
    print(app.url_map)
    app.run(debug=True)
